package limeirafol.bean;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import limeirafol.remote.cadastro.AcessorioVO;
import limeirafol.remote.estoque.EstoqueAcessorioFiltroConsultaVO;
import limeirafol.remote.estoque.EstoqueAcessorioVO;
import lbframework.classe.Conexao;
import lbframework.classe.Util;
import limeirafol.Global;
import limeirafol.remote.Formulario;
import limeirafol.remote.TipoOperacao;

public class BeanEstoque {

    AcessorioVO oAcessorio = new AcessorioVO();

    public double verificaEstoque(int i_id) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT estoque FROM acessoriosautomacao");
        sql.append(" WHERE id_acessorio = " + i_id);

        rst = stm.executeQuery(sql.toString());

        EstoqueAcessorioVO oEstoque = new EstoqueAcessorioVO();
        while (rst.next()) {

            oEstoque.quantidadeAtual = rst.getDouble("estoque");
        }

        return oEstoque.quantidadeAtual;

    }

    public boolean verificaPrateleira(int i_id) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT prateleira FROM acessoriosautomacao");
        sql.append(" WHERE id_acessorio = " + i_id);

        rst = stm.executeQuery(sql.toString());
        EstoqueAcessorioVO oEstoque = new EstoqueAcessorioVO();
        while (rst.next()) {
            oEstoque.prateleira = rst.getString("prateleira");
            return true;
        }
        return false;

    }

    public void atualizaAcessorioAutomacaoEntrada(EstoqueAcessorioVO i_estoque) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT * FROM acessoriosautomacao WHERE id_acessorio = " + i_estoque.id_acessorio);
        rst = stm.executeQuery(sql.toString());


        if (rst.next()) {

            sql = new StringBuilder();
            sql.append("UPDATE acessoriosautomacao SET");
            sql.append(" estoque = " + (i_estoque.quantidade + i_estoque.quantidadeAtual) + ",");
            sql.append(" precovenda = " + i_estoque.precoVenda + ",");
            sql.append(" prateleira = '" + i_estoque.prateleira + "'");
            sql.append(" WHERE id_acessorio = " + i_estoque.id_acessorio);
            stm.execute(sql.toString());

        } else {
            sql = new StringBuilder();
            sql.append("INSERT INTO acessoriosautomacao (id_acessorio, estoque, precovenda, prateleira) VALUES (");
            sql.append(i_estoque.id_acessorio + ", ");
            sql.append(i_estoque.quantidade + ", ");
            sql.append(i_estoque.precoVenda + ", ");
            sql.append("'" + i_estoque.prateleira + "')");
            stm.execute(sql.toString());
        }
    }

    public void atualizaAcessorioAutomacaoSaida(EstoqueAcessorioVO i_estoque) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT * FROM acessoriosautomacao WHERE id_acessorio = " + i_estoque.id_acessorio);
        rst = stm.executeQuery(sql.toString());


        if (rst.next()) {
            sql = new StringBuilder();
            sql.append("UPDATE acessoriosautomacao SET");
            sql.append(" estoque = " + (i_estoque.quantidadeAtual - i_estoque.quantidade) + ",");
            sql.append(" precovenda = " + i_estoque.precoVenda + ",");
            sql.append(" prateleira = '" + i_estoque.prateleira + "'");
            sql.append(" WHERE id_acessorio = " + i_estoque.id_acessorio);
            stm.execute(sql.toString());
            stm.close();
        }
    }

    public void salvarAcessorioEstoque(EstoqueAcessorioVO i_estoque) throws Exception {
        Global.verificarPermissao(Formulario.ESTOQUE_ACESSORIOS, TipoOperacao.INCLUIR);

        Statement stm = null;
        //ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();
        sql = new StringBuilder();
        sql.append("INSERT INTO estoqueacessorios (id_acessorio, id_tipooperacao, precovenda,");
        sql.append(" quantidade, id_tipoembalagem, utilizaporcentagem, numeronota, data)");
        sql.append(" VALUES (");
        sql.append("" + i_estoque.id_acessorio + ", ");
        sql.append(i_estoque.id_tipoOperacao + ", ");
        sql.append(i_estoque.precoVenda + ", ");
        sql.append(i_estoque.quantidade + ", ");
        sql.append(i_estoque.id_tipoEmbalagem + ", ");
        sql.append(i_estoque.utilizaporcentagem + ", ");
        sql.append(i_estoque.numeronota + ", ");
        sql.append("'" + i_estoque.data + "'); ");

        stm.execute(sql.toString());
    }

    public String carregarPrateleira(int i_id) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT prateleira FROM acessoriosautomacao");
        sql.append(" WHERE id_acessorio = " + i_id);

        rst = stm.executeQuery(sql.toString());
        EstoqueAcessorioVO oEstoque = new EstoqueAcessorioVO();
        while (rst.next()) {
            oEstoque.prateleira = rst.getString("prateleira");
        }
        return oEstoque.prateleira;
    }

    public Vector<EstoqueAcessorioVO> consultaEstoqueAcessorio(EstoqueAcessorioFiltroConsultaVO i_filtro) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();
        sql = new StringBuilder();
        sql.append(" SELECT ea.id, ea.id_acessorio, a.descricao AS acessorio, ea.id_tipooperacao, top.descricao AS tipooperacao,");
        sql.append(" ea.precovenda, ea.quantidade, ea.id_tipoembalagem, te.descricao AS tipoembalagem, ea.utilizaporcentagem,");
        sql.append(" ea.numeronota, ea.data, a.codigointerno, a.codigoexterno");
        sql.append(" FROM estoqueacessorios AS ea");
        sql.append(" INNER JOIN acessorios AS a ON a.id = ea.id_acessorio");
        sql.append(" INNER JOIN tipooperacao AS top ON top.id = ea.id_tipooperacao");
        sql.append(" INNER JOIN tipoembalagem As te ON te.id = ea.id_tipoembalagem");
        sql.append(" WHERE 1 = 1 ");

        if (!i_filtro.dataInicio.equals("")) {
            sql.append("AND data BETWEEN '" + Util.formatDataBanco(i_filtro.dataInicio) + "' AND '" + Util.formatDataBanco(i_filtro.dataTermino) + "'");
        }
        if (i_filtro.id > 0) {
            sql.append(" AND ea.id = " + i_filtro.id);
        }
        if (!i_filtro.codigoInterno.trim().equals("")) {
            sql.append(" AND " + Util.getGoogle("a.codigointerno", i_filtro.codigoInterno));
        }
        if (!i_filtro.codigoExterno.trim().equals("")) {
            sql.append(" AND " + Util.getGoogle("a.codigoexterno", i_filtro.codigoExterno));
        }
        if (!i_filtro.descricao.trim().equals("")) {
            sql.append(" AND " + Util.getGoogle("a.descricao", i_filtro.descricao));
        }
        if (i_filtro.numeronota > 0) {
            sql.append(" AND ea.numeronota = " + i_filtro.numeronota);
        }
        if (!(i_filtro.idTipoOperacao == -1)) {
            sql.append(" AND ea.id_tipooperacao = " + i_filtro.idTipoOperacao);
        }
        sql.append("ORDER BY ea.id");

        rst = stm.executeQuery(sql.toString());

        Vector<EstoqueAcessorioVO> vEstoqueAcessorio = new Vector();

        while (rst.next()) {
            EstoqueAcessorioVO oEstoque = new EstoqueAcessorioVO();
            oEstoque.id = rst.getInt("id");
            oEstoque.id_acessorio = rst.getInt("id_acessorio");
            oEstoque.descricao = rst.getString("acessorio");
            oEstoque.codigoInterno = rst.getString("codigointerno");
            oEstoque.codigoExterno = rst.getString("codigoexterno");
            oEstoque.id_tipoOperacao = rst.getInt("id_tipooperacao");
            oEstoque.tipoOperacao = rst.getString("tipooperacao");
            oEstoque.id_tipoEmbalagem = rst.getInt("id_tipoembalagem");
            oEstoque.tipoEmbalagem = rst.getString("tipoembalagem");
            oEstoque.quantidade = rst.getDouble("quantidade");
            oEstoque.utilizaporcentagem = rst.getBoolean("utilizaporcentagem");
            oEstoque.precoVenda = rst.getDouble("precovenda");
            oEstoque.data = Util.formatDataGUI(rst.getDate("data"));
            oEstoque.numeronota = rst.getInt("numeronota");
            vEstoqueAcessorio.add(oEstoque);
        }

        return vEstoqueAcessorio;
    }

    public double verificaEstoqueMaximo(int i_id) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT estoquemaximo FROM acessorios");
        sql.append(" WHERE id = " + i_id);

        rst = stm.executeQuery(sql.toString());
        AcessorioVO oEstoqueMax = new AcessorioVO();
        while (rst.next()) {

            oEstoqueMax.estoqueMaximo = rst.getDouble("estoquemaximo");
        }
        stm.close();
        return oEstoqueMax.estoqueMaximo;

    }

    public void atualizaEstoqueMaximo(int i_id, double i_estoque) throws Exception {
        Statement stm = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();
        sql = new StringBuilder();
        sql.append("UPDATE acessorios SET");
        sql.append(" estoquemaximo = " + i_estoque);
        sql.append(" WHERE id = " + i_id);
        stm.execute(sql.toString());

        stm.close();
    }
}
